/* x&=(x-1)可以删除从右边数第一个二进制值为1的位，如果最右边位是1,
   x-1之后，x&（x-1）消除该位，如果最右边位是0，x&（x-1）则消除从
   右数第一个1,因为计算x-1时发生了借位，因此，迭代删除的次数就是x中
   二进制位为1的个数*/

#include <stdio.h>

int bitcount(unsigned x);

int main()
{
    printf("out = %d\n", bitcount(0b1100110010101111));
    return 0;
}

int bitcount(unsigned x)
{
    int b;
    for(b = 0; x != 0; b++)
        x &= (x-1);
    return b;
}